<?php
/**
 * EventController is an instance of Controller (application.components). 
 *
 * Controller is an instance of CController (system.web).
 * CController manages a set of actions which deal with the corresponding user requests. 
 * Through the actions, CController coordinates the data flow between models and views. 
 *
 * Eduow :  International system for education (http://eduow.com)
 * Copyright 2010, Nikolay Stoitsev 
 *
 * Licensed under GNU General Public License version 2
 * Redistributions of files must retain the above copyright notice.
 *
 * @filesource
 * @copyright     Copyright 2010
 * @link          http://eduow.com Eduow Project
 * @package       eduow
 * @subpackage    application.controllers
 * @inheritance   class EventController » Controller » CController » CBaseController » CComponent
 * @implements    
 * @since         Eduow v 0.0.3
 * @license       http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License version 2
 */

class EventController extends Controller
{
	const PAGE_SIZE=10;

	/**
	 * @var string specifies the default action to be 'list'.
	 */
	public $defaultAction='list';

	/**
	 * @var CActiveRecord the currently loaded data model instance.
	 */
	private $_model;

	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	public function accessRules()
	{
		return array(
			'partList'=>array('*'),
			'*'=>array(Group::USER, 'min'),
		);
	}

	/**
	 * Shows a particular model.
	 */
	public function actionShow()
	{
		$this->render('show',array('model'=>$this->loadEvent()));
	}

	/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'show' page.
	 */
	public function actionCreate()
	{
		$model=new Event;
		
		if(isset($_POST['Event']))
		{
			$model->attributes=$_POST['Event'];
			$model->user=Yii::app()->user->id;
			if($model->save())
				$this->redirect(array('list'));
		}
		$this->render('create',array('model'=>$model));
	}

	/**
	 * Updates a particular model.
	 * If update is successful, the browser will be redirected to the 'show' page.
	 */
	public function actionUpdate()
	{
		$model=$this->loadEvent();
		if(isset($_POST['Event']))
		{
			$model->attributes=$_POST['Event'];
			if($model->save())
				$this->redirect(array('show','id'=>$model->id));
		}
		$this->render('update',array('model'=>$model));
	}

	/**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'list' page.
	 */
	public function actionDelete()
	{
			
		$this->loadModel()->delete();

		$this->render('remove');
		
	}

	/**
	 * Lists all models.
	 */
	public function actionList()
	{
		if(isset($_GET['time']))
			$time = $_GET['time'];
		else
			$time = time();

		$today = date("Y/n/j", time());
		$current_month = date("n", $time);
		$current_year = date("Y", $time);
		$current_month_text = date("F Y", $time);
		$total_days_of_current_month = date("t", $time);
		$user = Yii::app()->user->id;
		
		$connection = Yii::app()->db;
		$connection->setActive(true);

		$sql="SELECT DATE_FORMAT(date,'%d') AS day,content,title FROM event WHERE date BETWEEN  '$current_year/$current_month/01' AND '$current_year/$current_month/$total_days_of_current_month' AND (user = '$user' OR visible = 'public')";
		$command=$connection->createCommand($sql);
		$dataReader=$command->query();

		$this->render('list',array(
			'dataReader'=>$dataReader,'time'=>$time
		));
	}

public function actionPartList()
	{
		if(isset($_GET['time']))
			$time = $_GET['time'];
		else
			$time = time();

		$today = date("Y/n/j", time());
		$current_month = date("n", $time);
		$current_year = date("Y", $time);
		$current_month_text = date("F Y", $time);
		$total_days_of_current_month = date("t", $time);
		$events = array();
		$user = Yii::app()->user->id;
		$connection = Yii::app()->db;
		$connection->setActive(true);

		$sql="SELECT DATE_FORMAT(date,'%d') AS day,content,title FROM event WHERE date BETWEEN  '$current_year/$current_month/01' AND '$current_year/$current_month/$total_days_of_current_month' AND (user = '$user' OR visible = 'public')";
		$command=$connection->createCommand($sql);
		$dataReader=$command->query();

		$this->renderPartial('partlist',array(
			'dataReader'=>$dataReader,'time'=>$time
		));
	}

	/**
	 * Manages all models.
	 */
	public function actionAdmin()
	{
		$this->processAdminCommand();

		$criteria=new CDbCriteria;

		$pages=new CPagination(Event::model()->count($criteria));
		$pages->pageSize=self::PAGE_SIZE;
		$pages->applyLimit($criteria);

		$sort=new CSort('Event');
		$sort->applyOrder($criteria);

		$models=Event::model()->findAll($criteria);

		$this->render('admin',array(
			'models'=>$models,
			'pages'=>$pages,
			'sort'=>$sort,
		));
	}

	/**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer the primary key value. Defaults to null, meaning using the 'id' GET variable
	 */
	public function loadEvent($id=null)
	{
		if($this->_model===null)
		{
			if($id!==null || isset($_GET['id']))
				$this->_model=Event::model()->findbyPk($id!==null ? $id : $_GET['id']);
			if($this->_model===null)
				throw new CHttpException(404,'The requested page does not exist.');
		}
		return $this->_model;
	}

	/**
	 * Executes any command triggered on the admin page.
	 */
	protected function processAdminCommand()
	{
		if(isset($_POST['command'], $_POST['id']) && $_POST['command']==='delete')
		{
			$this->loadEvent($_POST['id'])->delete();
			// reload the current page to avoid duplicated delete actions
			$this->refresh();
		}
	}
}
